#include "PWM.h"
#include "Timer.h"
#include "adc.h"
#include "bsp_rcc.h"
#include "bsp_tim.h"
#include "bsp_uart.h"
#include "delay.h"
#include "do_mqtt.h"
#include "infrared.h"
#include "light.h"
#include "w55mh32_gpio.h"
#include "wiz_interface.h"
#include "wizchip_conf.h"
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SOCKET_ID 0
#define ETHERNET_BUF_MAX_SIZE (1024 * 2)

/* network information */
wiz_NetInfo default_net_info = {.mac = {0x00, 0x08, 0xdc, 0x12, 0x22, 0x12},
                                .ip = {192, 168, 1, 30},
                                .gw = {192, 168, 1, 1},
                                .sn = {255, 255, 255, 0},
                                .dns = {8, 8, 8, 8},

                                .dhcp = NETINFO_DHCP};

uint8_t ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {0};
static uint8_t mqtt_send_ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {0};
static uint8_t mqtt_recv_ethernet_buf[ETHERNET_BUF_MAX_SIZE] = {0};

int main(void) {
  /* hardware initialization */
  rcc_clk_config();
  delay_init();

  console_usart_init(115200);

  tim3_init();
  light_init();
  infrared_init();
  pwm_init();
  timer_init();
  timer4_init();
  ad_init();
  printf("%s MQTT OneNET example\r\n", _WIZCHIP_ID_);

  /* wiztoe init */
  wiz_toe_init();

  wiz_phy_link_check();

  network_init(ethernet_buf, &default_net_info);

  mqtt_init(SOCKET_ID, mqtt_send_ethernet_buf, mqtt_recv_ethernet_buf);
  while (1) {
    light_control();
    do_mqtt();
  }
}
